package com.builder;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;

import com.model.MovimientoStock;
import com.model.Stock;
import com.view.ClienteView;
import com.view.DepositoView;
import com.view.MovimientoStockView;
import com.view.ProductoView;
import com.view.StockView;
import com.view.UsuarioView;

@ManagedBean
@ViewScoped
@SuppressWarnings("serial")
public class MovimientoStockBuilder extends
		BaseBuilder<MovimientoStockView, MovimientoStock> {

	@ManagedProperty("#{depositoBuilder}")
	private DepositoBuilder depositoBuilder;

	@ManagedProperty("#{usuarioBuilder}")
	private UsuarioBuilder usuarioBuilder;

	@ManagedProperty("#{productoBuilder}")
	private ProductoBuilder productoBuilder;

	@ManagedProperty("#{proveedorBuilder}")
	private ProveedorBuilder proveedorBuilder;

	@ManagedProperty("#{clienteBuilder}")
	private ClienteBuilder clienteBuilder;

	@Override
	public MovimientoStock toDomain(MovimientoStockView view) {
		return new MovimientoStock(
				view.getId(),
				view.getTipoMovimientoStock(),
				view.getTipoMovimientoManual(),
				view.getProducto() != null ? productoBuilder.toDomain(view
						.getProducto()) : null,
				view.getCantidad(),
				view.getDepositoOrigen() != null ? depositoBuilder
						.toDomain(view.getDepositoOrigen()) : null,
				view.getDepositoDestino() != null ? depositoBuilder
						.toDomain(view.getDepositoDestino()) : null,
				view.getEstado(),
				view.getObservaciones(),
				view.getFecha(),
				view.getUsuario() != null ? usuarioBuilder.toDomain(view
						.getUsuario()) : null,
				view.getStock() != null && view.getStock().getId() != null ? new Stock(
						view.getId(),
						proveedorBuilder.toDomain(view.getStock()
								.getProveedor()),
						productoBuilder.toDomain(view.getStock().getProducto()),
						view.getStock().getCantidad(),
						view.getStock().getFechaDeIngreso(),
						view.getStock().getFechaUltimoMovimiento(),
						null,
						view.getStock().getDeposito() != null
								&& view.getStock().getDeposito().getId() != null ? depositoBuilder
								.toDomain(view.getStock().getDeposito()) : null,
						view.getStock().getCliente() != null
								&& view.getStock().getCliente().getId() != null ? clienteBuilder
								.toDomain(view.getStock().getCliente()) : null)
						: null);
	}

	@Override
	public MovimientoStockView toView(MovimientoStock model) {
		return new MovimientoStockView(
				model.getID(),
				model.getTipoMovimientoStock(),
				model.getTipoMovimientoManual(),
				model.getProducto() != null ? productoBuilder.toView(model
						.getProducto()) : new ProductoView(),
				model.getCantidad(),
				model.getDepositoOrigen() != null ? depositoBuilder
						.toView(model.getDepositoOrigen()) : null,
				model.getDepositoDestino() != null ? depositoBuilder
						.toView(model.getDepositoDestino()) : null,
				model.getEstado(),
				model.getObservaciones(),
				model.getFecha(),
				model.getUsuario() != null ? usuarioBuilder.toView(model
						.getUsuario()) : new UsuarioView(),
				model.getStock() != null ? new StockView(
						model.getID(),
						proveedorBuilder
								.toView(model.getStock().getProveedor()),
						productoBuilder.toView(model.getStock().getProducto()),
						model.getStock().getCantidad(),
						model.getStock().getFechaDeIngreso(),
						model.getStock().getFechaUltimoMovimiento(),
						null,
						model.getStock().getDeposito() != null ? depositoBuilder
								.toView(model.getStock().getDeposito())
								: new DepositoView(), model.getStock()
								.getCliente() != null ? clienteBuilder
								.toView(model.getStock().getCliente())
								: new ClienteView())
						: new StockView());
	}

	public DepositoBuilder getDepositoBuilder() {
		return depositoBuilder;
	}

	public void setDepositoBuilder(DepositoBuilder depositoBuilder) {
		this.depositoBuilder = depositoBuilder;
	}

	public UsuarioBuilder getUsuarioBuilder() {
		return usuarioBuilder;
	}

	public void setUsuarioBuilder(UsuarioBuilder usuarioBuilder) {
		this.usuarioBuilder = usuarioBuilder;
	}

	public ProductoBuilder getProductoBuilder() {
		return productoBuilder;
	}

	public void setProductoBuilder(ProductoBuilder productoBuilder) {
		this.productoBuilder = productoBuilder;
	}

	public ProveedorBuilder getProveedorBuilder() {
		return proveedorBuilder;
	}

	public void setProveedorBuilder(ProveedorBuilder proveedorBuilder) {
		this.proveedorBuilder = proveedorBuilder;
	}

	public ClienteBuilder getClienteBuilder() {
		return clienteBuilder;
	}

	public void setClienteBuilder(ClienteBuilder clienteBuilder) {
		this.clienteBuilder = clienteBuilder;
	}

}
